<?php
/**
* @Auth By AutoCreateCode
* @Desc MenuGroup类
* @Date 2016-03-08 09:14:41
*/
namespace App\Mod;
use Lib\Model;
class MenuGroup extends Model{
    const GROUP_TYPE_ADM = 1;
    const GROUP_TYPE_BUS = 2;
    const PAGE_SIZE = 1;

    /**
    * 插入数据
    * @access public
    * @param Array $data 要插入的数据
    * @return Bool
    */
    public function addMenuGroup($data){
        if(empty($data) || !is_array($data)){
            return false;
        }
        
        $validator = new \Lib\Validator($data);
        $validator->setRules([
            'name' => ['required'=>true,'validate'=>'strip_tags,trim'],
            'icon' => ['required'=>true,'validate'=>'strip_tags,trim'],
            'type' => ['required'=>true,'validate'=>'absint'],
        ])->setMessages([
            'name' => ['required'=>'分组名不能为空','validate'=>'分组名填写不正确'],
            'icon' => ['required'=>'菜单模块图标不能为空','validate'=>'菜单模块图标填写不正确'],
            'type' => ['required'=>'分组类型不能为空','validate'=>'分组类型填写不正确'],
        ]);
    
        $data = $validator->validate();
        if(!$data){
            $this->error = $validator->getError();
            return false;
        }
        
        return $this->insert($data);
    }

    /**
    * 根据ID删除多条记录
    * @access public
    * @param Mix $id 要删除的ID，可为数组，也可用逗号用隔
    * @return Bool
    */
    public function delMenuGroup($id){
        if(empty($id) || (!is_numeric($id) && !is_array($id))){
            return false;
        }
        $ids = is_array($id) ? join(',',$id) : $id;
        return $this->where("id in({$ids})")->delete();
    }

    /**
    * 根据ID修改记录
    * @access public
    * @param Int $id 要修改的ID
    * @param Array $data 要修改的数据
    * @return Bool
    */
    public function updateMenuGroup($id,$data){
        if(empty($id) || (!is_numeric($id) && !is_array($id)) || empty($data) || !is_array($data)){
            return false;
        }
        
        $validator = new \Lib\Validator($data);
        $validator->setRules([
            'name' => ['validate'=>'strip_tags,trim'],
            'icon' => ['validate'=>'strip_tags,trim'],
            'type' => ['validate'=>'absint'],
        ])->setMessages([
            'name' => ['validate'=>'分组名填写不正确'],
            'icon' => ['validate'=>'菜单模块图标填写不正确'],
            'type' => ['validate'=>'分组类型填写不正确'],
        ]);
    
        $data = $validator->validate();
        if(!$data){
            $this->error = $validator->getError();
            return false;
        }
    
        $ids = is_array($id) ? join(',',$id) : $id;
        return $this->where("id in({$ids})")->update($data);
    }

    /**
    * 根据ID获取单条记录
    * @access public
    * @param Int $id 要查询的ID
    * @param String $fields 要返回的字段
    * @return Array
    */
    public function getMenuGroupById($id,$fields="*"){
        if(empty($id) || !is_numeric($id)){
            return false;
        }
        return $this->where("id={$id}")->fields($fields)->fetch();
    }

    /**
    * 根据多个ID获取多条记录
    * @access public
    * @param Mix $ids 要查询的ID,可为数组，也可以用逗号分隔
    * @param String $fields 要返回的字段
    * @return Array
    */
    public function getMenuGroupByIds($ids,$fields="*"){
        if(!is_array($ids)){
            $ids = explode(',',$ids);
        }
        $ids = join(',',$ids);
        return $this->where("id in($ids)")->order("find_in_set(id,'{$ids}')")->fields($fields)->select();
    }

    /**
    * 根据SQL条件查询记录
    * @access public
    * @param String $condition 查询条件
    * @param Int $offset 偏移量
    * @param Int $size 返回条数
    * @param String $order 排序
    * @param String $fields 要返回的字段
    * @return Mix Array
    */
    public function search($condition,$offset=0,$size=20,$order='id desc',$fields='*'){
        return $this->fields($fields)->where($condition)->order($order)->limit($offset,$size)->select();
    }

    /**
    * 根据条件返回记录数
    * @access public
    * @param String $condition 查询条件
    * @return Int
    */
    public function searchCount($condition){
        return $this->where($condition)->count();
    }

    /**
     * 菜单分组是否存在
     * @return Mixed
     */
    public function isExistGroup($name) {
        $menuGroup = $this->where("name='{$name}'")->fields('id')->fetch();
        if ($menuGroup !== false)
            return $menuGroup['id'];
        else
            return false;
    }

    /**
     * 分页获取菜单分组列表
     * @param Int $type 分组类型
     * @return Array
     */
    public function getGroupListByPage($type) {
        if ($type == self::GROUP_TYPE_ADM)
            $cond = 'type=' . self::GROUP_TYPE_ADM;
        elseif ($type == self::GROUP_TYPE_BUS)
            $cond = 'type=' . self::GROUP_TYPE_BUS;
        $page = App\Lib\Page($this->where($cond)->count(), self::PAGE_SIZE);
        $menuGroups = $this->where($cond)->limit($page->offset, $page->size)->fields('name,icon')->select();
        return [
            'list' => $menuGroups,
            'pageHtml' => $page->show()
        ];
    }
}